package com.mypan.service.impl;

import com.alibaba.fastjson2.JSONObject;
import com.mypan.dao.mapper.FileMapper;
import com.mypan.dao.tbFile;
import com.mypan.service.FileService;
import com.mypan.uitls.FileUtil;
import com.mypan.uitls.SpringUtils;
import com.mypan.vo.FileVo;
import org.apache.catalina.AccessLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;

@Service
@Transactional

public class FileServiceImpl implements FileService {
    @Autowired
    FileMapper fileMapper;

    @Override
    public JSONObject getDirFileList(String path) {
        List<FileVo> reFileVoList = new ArrayList<>();
        List<FileVo> fileVoList = new ArrayList<>();

        String newPath = FileUtil.basePath + path;
        File dir = new File(newPath + "/test");

        // 判断文件夹是否存在
        if (!dir.exists()) {
            System.out.println(dir);
            System.out.println("目录不存在");
            return null;
        } else {
//            获取当前文件夹下的目录和文件
            File[] fileList = dir.listFiles();
            for (File f : fileList) {
                if (f.isDirectory() && !f.getName().equals("compressDir")) {
                    FileVo fileVo = new FileVo(f.getPath(), 0, f.getName(), FileUtil.isNotEmptyDir(f), f.getPath());
                    fileVoList.add(fileVo);
                } else if (f.isFile()) {
//                    如果是文件，获取文件的id
                    String fId = f.getName().substring(0, f.getName().lastIndexOf("."));
//                    从数据库里查找文件信息
                    if (fileMapper == null) {
                        fileMapper = (FileMapper) SpringUtils.getBean(FileMapper.class);
                    }
                    System.out.println(fId);
                    tbFile tbFile = fileMapper.getFileById(fId);
                    FileVo fileVo = new FileVo(f.getPath(), 1, tbFile.getName(), false, tbFile == null ? null : tbFile.getCompress());
                    fileVoList.add(fileVo);
                }
            }
        }

        for (FileVo f : fileVoList) {
//            将文件本地地址改成网络地址
            String tPath = f.getPath().replace("\\", "/");
            f.setPath(tPath.replace(FileUtil.basePath, FileUtil.fileBaseURL));
//            将文件本地压缩地址改成网络地址
            if (f.getCompressPath() != null) {
                String tPathCom  = f.getCompressPath().replace("\\", "/");
                f.setCompressPath(tPathCom.replace(FileUtil.basePath, FileUtil.fileBaseURL));
            }
            // 1:word文件
            // 2:excel文件
            // 3:pdf文件
            // 4:ppt文件
            // 5:txt文件
            // 6:img文件
            // 7:audio文件
            // 8:video文件
            // 9:zip文件
            // 10:other文件
            if (f.getName().lastIndexOf(".") != -1) {
                if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".doc") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".docx")) {
                    f.setType(1);
                } else if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".xls") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".xlsx")) {
                    f.setType(2);
                } else if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".pdf")) {
                    f.setType(3);
                } else if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".ppt") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".pptx")) {
                    f.setType(4);
                } else if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".txt")) {
                    f.setType(5);
                } else if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".png") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".jpg") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".jpeg") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".gif") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".ico")) {
                    f.setType(6);
                } else if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".mp3") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".wav") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".ogg")) {
                    f.setType(7);
                } else if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".mp4") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".flv") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".webm") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".m4v") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".avi")) {
                    f.setType(8);
                } else if (f.getName().substring(f.getName().lastIndexOf(".")).equals(".zip") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".rar") ||
                        f.getName().substring(f.getName().lastIndexOf(".")).equals(".7z"))
                    f.setType(9);
                else
                    f.setType(10);
            }
            reFileVoList.add(f);
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("fileList", reFileVoList);
        jsonObject.put("currentPath", path);
        return jsonObject;
    }

    @Override
    public String alertImg(tbFile tbfile) {
        if (fileMapper == null) {
            fileMapper = (FileMapper) SpringUtils.getBean(FileMapper.class);
        }
        return fileMapper.addFile(tbfile) + "";
    }

    @Override
    public String getTextById(String id) {
        if (fileMapper == null) {
            fileMapper = (FileMapper) SpringUtils.getBean(FileMapper.class);
        }
        String textPath = fileMapper.getFileVoById(id).getPath();
        System.out.println("=-=======================path");
        String path = textPath.replaceAll("/",Matcher.quoteReplacement(File.separator));
        System.out.println(path);
        return FileUtil.readText(path);

    }
}
